home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 17 / CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso / CUCD / Programming / Gui4Cli / Tools / Calc.gc next >
Encoding:
Gui4CLI script  |  1980-01-03  |  6.9 KB  |  291 lines

  1. G4C
  2.  
  3. ; calc.gc
  4.  
  5. ; A calculator, which uses ARexx to calculate & display the results.
  6. ; NOTE : ** means "to the power of"  i.e. 5**2 = 25
  7.  
  8. ; Other ARexx operators can be entered manually if needed.
  9.  
  10.  
  11. WINBIG   400 24 160 128 "RexxCalc"   ; Our window.
  12. WinType  11110001                ; It has all standard gadgets & bottom resize
  13. WINBACKGROUND PATTERN 0 2        ; Add a flashy background..
  14. varpath ''             ; use only private variables
  15.  
  16.  
  17. BOX  0 0 0 0 IN ICONDROP ; A window sized box, taking us way beyond mere "cool"
  18.  
  19. ;************************** GENERAL EVENTS ***********************************
  20.  
  21. xONLOAD                     ; Upon loading of the GUI
  22. ifexists port AREXX         ; check for rexxmast
  23.    ;
  24. elseifexists file rexxmast
  25.    run rexxmast
  26. elseifexists file sys:system/rexxmast
  27.    run sys:system/rexxmast
  28. else
  29.    ezreq "Could not find RexxMast" Abort ''
  30.    guiquit calc.gc
  31.    stop
  32. endif
  33. setscreen calc.gc $*SCREEN
  34. calc.var = ""               ; This is our main variable
  35. setgad calc.gc 2 HIDE      ; hide the ticker tape
  36. GUIOPEN calc.gc
  37. setvar mem  .mem1           ; These are the Memory variables
  38. setvar .mem1 0              ;     The ones starting with a full stop,
  39. setvar .mem2 0              ;     are env: variables
  40. setvar .mem3 0
  41. setvar .mem4 0
  42. setvar .mem5 0
  43. setvar membuff ""
  44. setvar .result "0"          ; somewhere to put the result (env: variable)
  45. setvar calcmode SMALL       ; small/big window
  46.  
  47. xonclose
  48. guiquit calc.gc
  49.  
  50. xOnQuit                     ; On quitting we delete the env variables, 
  51. delete env:.mem#?           ; so they don't linger in Env:
  52. delvar .result
  53.  
  54. ;***************************** BUTTONS GALORE ! ******************************
  55. ; All these buttons do the same thing. They AppVar their number or letter
  56. ; to our main variable and redisplay it
  57.  
  58.  
  59. ;=======================> The Buttons for the plain numbers
  60.  
  61. xBUTTON 10 25 25 15 1
  62. gadkey 1                       ; Keyboard shortcut
  63. AppVar calc.var 1              ; AppVar the number to "calc.var"
  64. update calc.gc  1 $calc.var   ; and re-display it.
  65.  
  66. xBUTTON 36 25 25 15 2          ; same as above
  67. gadkey  2
  68. AppVar calc.var 2
  69. update calc.gc  1 $calc.var
  70.  
  71. xBUTTON 62 25 25 15 3
  72. gadkey  3
  73. AppVar calc.var 3
  74. update calc.gc  1 $calc.var
  75.  
  76. xBUTTON 10 41 25 15 4
  77. gadkey  4
  78. AppVar calc.var 4
  79. update calc.gc  1 $calc.var
  80.  
  81. xBUTTON 36 41 25 15 5
  82. gadkey  5
  83. AppVar calc.var 5
  84. update calc.gc  1 $calc.var
  85.  
  86. xBUTTON 62 41 25 15 6
  87. gadkey  6
  88. AppVar calc.var 6
  89. update calc.gc  1 $calc.var
  90.  
  91. xBUTTON 10 57 25 15 7
  92. gadkey  7
  93. AppVar calc.var 7
  94. update calc.gc  1 $calc.var
  95.  
  96. xBUTTON 36 57 25 15 8
  97. gadkey  8
  98. AppVar calc.var 8
  99. update calc.gc  1 $calc.var
  100.  
  101. xBUTTON 62 57 25 15 9
  102. gadkey  9
  103. AppVar calc.var 9
  104. update calc.gc  1 $calc.var
  105.  
  106. xBUTTON 10 73 25 15 0
  107. gadkey  0
  108. AppVar calc.var 0
  109. update calc.gc  1 $calc.var
  110.  
  111. xBUTTON 36 73 25 15 .
  112. gadkey  .
  113. AppVar calc.var .
  114. update calc.gc  1 $calc.var
  115.  
  116. xBUTTON 62 73 25 15 <        ; backspace
  117. gadkey #8
  118. cutvar calc.var CUT CHAR -1 ""   ; It will delete the last character of
  119. update calc.gc  1 $calc.var     ; "calc.var" and re-display it
  120.  
  121. ;=========================> The operators
  122.  
  123. xBUTTON 90 25 25 15 /
  124. gadkey  /
  125. AppVar calc.var /
  126. update calc.gc  1 $calc.var
  127.  
  128. xBUTTON 90 41 25 15 *       ; hit twice for square
  129. gadkey  *
  130. AppVar calc.var *
  131. update calc.gc  1 $calc.var
  132.  
  133. xBUTTON 90 57 25 15 -
  134. gadkey  -
  135. AppVar calc.var -
  136. update calc.gc  1 $calc.var
  137.  
  138. xBUTTON 90 73 25 15 +
  139. gadkey  +
  140. AppVar calc.var +
  141. update calc.gc  1 $calc.var
  142.  
  143. ;------------- right most bank
  144.  
  145. xBUTTON 116 25 35 15 (
  146. gadkey  (
  147. AppVar calc.var (
  148. update calc.gc  1 $calc.var
  149.  
  150. xBUTTON 116 41 35 15 )
  151. gadkey  )
  152. AppVar calc.var )
  153. update calc.gc  1 $calc.var
  154.  
  155. xBUTTON 116 57 35 15 CLR       ; Clear
  156. gadkey #127
  157. update calc.gc  1 0
  158. setvar calc.var ""
  159. if $calcmode = BIG                ; update ticker tape
  160.    lvuse calc.gc 2
  161.    LVAdd '** Clear **'
  162. endif
  163.  
  164. xBUTTON 116 73 35 15 =
  165. gadkey #13
  166. gosub calc.gc calculate        ; GoSub the routine which does the calculation
  167.  
  168.  
  169. ;===========================> This is our display panel. - Note it's
  170. ; a xTEXTin type gadget, so we can enter a calculation directly into it.
  171.  
  172. xTEXTIN 10 5 140 18 "" calc.var 0 512
  173. GADID 1
  174. gosub calc.gc calculate        ; GoSub the routine which does the calculation
  175.  
  176.  
  177. ;===================> routine to calculate & display result
  178.  
  179. xROUTINE calculate
  180. lvuse calc.gc 2                        ; use ticker tape lv
  181. if $calc.var > ""                          ; If there is an entry
  182.    if $calcmode = BIG
  183.       LVAdd '$calc.var'
  184.    endif
  185.    cli "rx 'say >env:.result $calc.var'"
  186.    update calc.gc  1  $.result       ; and display the answer EVAL returned
  187.    setvar calc.var $.result           ; We set "calc.var" to the result
  188.    if $calcmode = BIG                 ; update ticker tape
  189.       LVAdd '=> $calc.var'
  190.    endif
  191.    if $calc.var = 0 
  192.       calc.var = ""                   ; and if it's 0, we empty it (looks nicer)
  193.    endif
  194. endif 
  195.  
  196.  
  197. ;***************************** MEMORIES **************************************
  198.  
  199. ; If you look at the following code carefully, you will see that we
  200. ; need a variable within a variable. 
  201. ; We use "membuff" to construct such a variable.
  202.  
  203. ;=======================> Memories display panel
  204.  
  205. xTEXTIN 10 90 140 16 "" $mem 0 30
  206. GadID 5
  207.  
  208. ;=======================> Memories cycler
  209.  
  210. xCycler 10 108 60 15 "" mem
  211. Cstr "M1" .mem1
  212. Cstr "M2" .mem2
  213. Cstr "M3" .mem3
  214. Cstr "M4" .mem4
  215. Cstr "M5" .mem5
  216. setvar membuff "\$$mem"    ; This means set membuff to $ + whatever is in "mem"
  217. update calc.gc 5 $membuff  ; so that it points to the correct variable
  218.  
  219. ;=======================> Memory IN/OUT
  220.  
  221. xButton 70 108 20 15 I          ; These buttons do the usual MEM in/out/+/-
  222. SetVar $mem $calc.var           ; stuff that calculators do.
  223. setvar membuff "\$$mem"
  224. update calc.gc 5 $membuff
  225.  
  226. xButton 90 108 20 15 O
  227. setvar membuff "\$$mem"
  228. AppVar calc.var $membuff
  229. update calc.gc 1 $calc.var
  230.  
  231. xButton 110 108 20 15 +
  232. setvar membuff "\$$mem"
  233. cli "rx 'say >env:$mem $calc.var + $membuff'"
  234. setvar membuff "\$$mem"
  235. update calc.gc 5 $membuff
  236.  
  237. xButton 130 108 20 15 -
  238. setvar membuff "\$$mem"
  239. cli "rx 'say >env:$mem $membuff - $calc.var'"
  240. setvar membuff "\$$mem"
  241. update calc.gc 5 $membuff
  242.  
  243.  
  244. ;***************************** Ticker Tape **********************************
  245.  
  246. ; Here we expand the window to include a listview for the ticker tape
  247. ; This is done on clicking of the Right Mouse Button
  248.  
  249. xOnRMB
  250. if $calcmode = SMALL
  251.    calcmode = BIG
  252.    changegad calc.gc 0 -1 -1 320 128 ""
  253.    setgad calc.gc 2 SHOW
  254. else
  255.    calcmode = SMALL
  256.    lvuse calc.gc 2
  257.    lvclear
  258.    changegad calc.gc 0 -1 -1 160 128 ""
  259.    setgad calc.gc 2 HIDE
  260. endif
  261. redraw calc.gc
  262.  
  263. ;---- This is the listview that will show the results
  264. ;     update main calc pannel according to lv line clicked
  265.  
  266. xListview 155 5 158 123 "" calc.lv "" 10 TXT
  267. gadid 2
  268. cutvar calc.lv copy char 3 calc.3    ; update display to line content
  269. if $calc.3 = '** '            ; clear line
  270.    calc.var = 0
  271. else
  272.    if $calc.3 = '=> '            ; a result
  273.       cutvar calc.lv cut char 3 ""
  274.       calc.var = $calc.lv
  275.    else
  276.       calc.var = $calc.lv        ; a calculation
  277.    endif
  278. endif
  279. update calc.gc 1 $calc.var
  280. if $calc.var = 0
  281.    calc.var = ''
  282. endif
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.